Usage:
======

  zzdiff [ <option> ] ... <file-or-url1> <file-or-url2>
      Show contents differences between <file-or-url1> and <file-or-url2> in
      DIFF format. The "path" (relevant, e.g., for the "--path" command line
      option, see below) is "" (the empty string). One of the two inputs may be
      "-" (standard input).
  zzdiff [ <option> ] ... <dir1> <dir2>
      Show which files were added (missing in <dir1>) or deleted (missing in
      <dir2>) and their subdirectories, and any contents differences for the
      remaining files in DIFF format. The "path" (relevant, e.g., for the
      "--path" command line option, see below) is relative to <dir1>, e.g.
      "file.txt" or "subdir/file.zip!dir/file.txt" or
      "archive.tgz%!dir/file.txt" or "dir/file.Z%".

Description:
============

Compares files and web resources line by line; detects directories, compressed
and archive files, and even <nested> archives, and compares their entries
instead of their raw contents.
The default output format is the "normal format (see
"http://en.wikipedia.org/wiki/Diff_utility#Usage")", also known as the
"traditional format". Other output formats can be chosen through command line
options, see "Output generation", below.

Options:
========

General
-------

  --help
      Print this text and terminate.
  --7z-input-file-password <value>
      Password to decrypt password-protected 7ZIP input files.
  --zip-input-file-password <value>
      Password to decrypt password-protected zip archive entries.
  --password <value>
      All of the above.

File selection
--------------

  --path <glob>
      Process only matching files/entries, e.g."dir/file.zip!dir/file" or
      "**/file". See also "Globs", below.
  --look-into <format-glob>:<path-glob>
      Look into compressed and archive contents if its format matches <format-
      glob> and its path matches the <path-glob>. The default is to look into
      any recognised archive or compressed contents.
      Supported archive formats in this runtime configuration are:
      ${archive.formats}
      Supported compression formats in this runtime configuration are:
      ${compression.formats}
  --path-equivalence <path-regex>
  --pe <path-regex>
      Files with different names map iff their names match the <path-regex> and
      all capturing groups are equal. May be given more than once.
  --ne <path-regex>
      <*Deprecated* - Equivalent with "--path-equivalence <path-regex>".>
  --no-recurse-subdirctories
      Don't recurse through subdirectories; just compare the *existence* of
      subdirectories.

Content processing
------------------

  --disassemble
  --da
      Disassemble .class files.
  --da-verbose
      When disassembling .class files, include a constant pool dump, constant
      pool indexes, and hex dumps of all attributes in the disassembly output.
  --da-source-directory <directory>
      When disassembling .class files, look for source files in this directory.
      Source file loading is disabled by default.
  --da-no-lines
      When disassembling .class files, don't display lines debug info.
  --da-no-vars
      When disassembling .class files, don't display local variables debug
      info.
  --da-symbolic-labels
      When disassembling .class files, use symbolic labels /'L12') instead of
      numeric labels ('#123').
  --line-equivalence <path-pattern> <line-regex>
      Lines in files <path-pattern> that contain <line-regex> and all capturing
      groups are equal are regarded as equal.
  --ignore <path-pattern> <line-regex>
  -I <path-pattern> <line-regex>
      Ignore differences in files <path-pattern> where all lines (deleted,
      changed or added) match the given <line-regex>.
  --ignore-whitespace
  -w
      Ignore whitespace differences.
  --added-file REPORT|COMPARE_WITH_EMPTY|IGNORE
  --deleted-file REPORT|COMPARE_WITH_EMPTY|IGNORE
      How to deal with added resp. deleted files:
        REPORT (the default):
            Print "File added <path>", resp. "File deleted <path>" (or, with
            "--exist" or "--brief", print "+ <path>" resp. "- <path>").
        COMPARE_WITH_EMPTY:
            Generate a diff document by comparing with the empty document.
        IGNORE:
            Do nothing.
  --new-file
  -N
      Treat absent files as empty. This is shorthand for "--added-file
      COMPARE_WITH_EMPTY --deleted-file COMPARE_WITH_EMPTY".
  --unidirectional-new-file
      Treat added files as (previously) empty; deleted files are only reported.
      This is shorthand for "--added-file COMPARE_WITH_EMPTY --deleted-file
      REPORT".
  --unchanged-files
      Also report unchanged files.
  --encoding <charset-name>
      Encoding of the files being compared (defaults to the JVM default
      charset, "${file.encoding}").

Output generation
-----------------

  --out <output-file>
      Write DIFF to <output-file> instead of STDOUT.
  --normal
      Output "normal diff format (see
      "https://en.wikipedia.org/wiki/Diff_utility#Usage")"; this is the
      default.
  --exist
      Report only which files were added or deleted (do <not> report changed
      content).
  --brief
  -q
      Report only which files were added, deleted or changed.
  --context
  -c
      Output "context diff format (see
      "http://en.wikipedia.org/wiki/Diff_utility#Context_format")" with three
      lines of context.
  --Context <amount>
  -C <amount>
      Output "context diff format (see
      "http://en.wikipedia.org/wiki/Diff_utility#Context_format")" with
      <amount> lines of context.
  --unified
  -u
      Output "unified diff format (see
      "http://en.wikipedia.org/wiki/Diff_utility#Unified_format")" with three
      lines of context.
  --Unified <amount>
      Output "unified diff format (see
      "http://en.wikipedia.org/wiki/Diff_utility#Unified_format")" with
      <amount> lines of context.
  --keep-going
      Report errors and continue with next file.
  --sequential
      Scan directories strictly sequentially. The default is to parallelize the
      directory scan in multiple threads.
  --java-tokenization
      Regard documents as streams of Java tokens; the whitespace between tokens
      (including line breaks) is then insignificant.
  --ignore-c-style-comments
      Don't regard C-style comments ("/* ... */") as relevant for comparison.
  --ignore-c++-style-comments
      Don't regard C++-style comments ("// ...") as relevant for comparison.
  --ignore-doc-comments
      Don't regard doc comments ("/** ... */") as relevant for comparison.
  --nowarn
      Suppress all output except errors.
  --quiet
      Suppress "normal" output; print only errors and warnings.
  --verbose
      Print verbose messages.
  --debug
      Print verbose and debug messages.
  --log <level>:<logger>:<handler>:<formatter>:<format>
      Add logging at level FINE on logger "de.unkrig" to STDERR using the
      FormatFormatter and SIMPLE format, or the given arguments (which are all
      optional).

Globs
=====

A <glob> can have the form
   *~*.c~*.h,foo.c
, which means "foo.c plus all that don't end with .c or .h".

Example <glob>s:
----------------

  dir/file
      File "file" in directory "dir".
  file.gz%
      Compressed file "file.gz".
  file.zip!dir/file
      Entry "dir/file" in archive file "file.zip".
  file.tar.gz%!dir/file
      Entry "dir/file" in the compressed archive file "file.tar.gz".
  */x
      File "x" in an immediate subdirectory.
  **/x
      File "x" in any subdirectory.
  ***/x
      File "x" in any subdirectory, or any entry "**/x" in any archive file in
      any subdirectory.
  a,dir/file.7z!dir/b
      File "a" and entry "dir/b" in archive file "dir/file.7z".
  ~*.c
      Files that don't end with ".c".
  ~*.c~*.h
      Files that don't end with ".c" or ".h".
  ~*.c~*.h,foo.c
      "foo.c" plus all files that don't end with ".c" or ".h".
